home *** CD-ROM | disk | FTP | other *** search
/ Acorn User: The RISC OS Graphics CD / Acorn User: The RISC OS Graphics CD.iso / utilities / grphpaper / _grphpaper / wwv2data < prev   
Text File  |  1999-02-03  |  12KB  |  530 lines

  1. # WimpWorks Information File
  2. # WimpWorks © Jaffa Software 1996-8. All rights reserved.
  3.  
  4. DEF TASKdetails
  5.     Name        GrphPaper
  6.     Purpose        To make graph paper
  7.     Author        © Victor Markwart
  8.     Licence        Freeware
  9.     Version        0.03 (3 Feb 1999)
  10.     Compress    True
  11.     Memory        0K
  12.     IconbarSide    Right
  13.     IconbarPriority    &00000000
  14.     IconbarSprite    !grphpaper
  15.     IconbarText    
  16. ENDTASK
  17.  
  18. DEF WEMinclude
  19.     DrawWEM
  20.     Starter Pack
  21. ENDWEM
  22.  
  23. DEF MENUiconMenu%
  24.     GrphPaper
  25.     Info
  26.         S(infoWindow%)
  27.         
  28.     Help
  29.         
  30.         PROCopen_help
  31.     Quit
  32.         
  33.         CLOSEDOWN
  34. ENDMENU
  35.  
  36. DEF SUBR_PROCiconclick
  37.     Event    3
  38.     Every    -1
  39. DEF PROCiconclick(button%)
  40.   CASE button% OF
  41.   WHEN 4:
  42.     PROCmouse(mx%, my%, mb%, window, icon)
  43.     MOVEWINDOW(graphpaper1, mx%-300, my%+600)
  44.     OPENWINDOW(graphpaper1)
  45.   WHEN 1:
  46.     IF created=TRUE THEN OPENWINDOW(display)
  47.   ENDCASE
  48. ENDPROC
  49. ENDSUBR
  50.  
  51. DEF SUBR_PROCwindow_klik
  52.     Event    12
  53.     Every    -1
  54. DEF PROCwindow_klik(window%, icon%, button%)
  55.  LOCAL a$
  56.  CASE window% OF
  57.     WHEN graphpaper1
  58.       a$=READICON(window%, xmaj_no_icn)
  59.       IF a$="" THEN
  60.         a$="28"
  61.       ENDIF
  62.       xmaj_div%=VAL(a$)
  63.       
  64.       a$=READICON(window%, xmin_no_icn)
  65.       IF a$="" THEN
  66.         a$="5"
  67.       ENDIF
  68.       xmin_div%=VAL(a$)
  69.       
  70.       a$=READICON(window%, ymaj_no_icn)
  71.       IF a$="" THEN
  72.         a$="20"
  73.       ENDIF
  74.       ymaj_div%=VAL(a$)
  75.       
  76.       a$=READICON(window%, ymin_no_icn)
  77.       IF a$="" THEN
  78.         a$="5"
  79.       ENDIF
  80.       ymin_div%=VAL(a$)
  81.     
  82.     CASE icon% OF
  83.       WHEN 21:
  84.         SETICON(window%, 7, "x-axis")
  85.         SETICON(window%, 8, "y-axis")
  86.         HIDEICON(window%, 23, 0)
  87.         HIDEICON(window%, 24, 0)
  88.         HIDEICON(window%, 25, 0)
  89.         HIDEICON(window%, 26, 0)
  90.       WHEN 22:
  91.         SETICON(window%, 7, "radial")
  92.         SETICON(window%, 8, "orbital")
  93.         HIDEICON(window%, 23, 1)
  94.         HIDEICON(window%, 24, 1)
  95.         HIDEICON(window%, 25, 1)
  96.         HIDEICON(window%, 26, 1)
  97.       WHEN xmaj_up_icn:
  98.         xmaj_div%+=1
  99.         IF xmaj_div%>99 THEN xmaj_div%=99
  100.         SETICON(window%, xmaj_no_icn, STR$(xmaj_div%))
  101.       WHEN xmaj_down_icn:
  102.         xmaj_div%-=1
  103.         IF xmaj_div%<1 THEN xmaj_div%=1
  104.         SETICON(window%, xmaj_no_icn, STR$(xmaj_div%))
  105.         
  106.       WHEN xmin_up_icn:
  107.         xmin_div%+=1
  108.         IF xmin_div%>10 THEN xmin_div%=10
  109.         SETICON(window%, xmin_no_icn, STR$(xmin_div%))
  110.       WHEN xmin_down_icn:
  111.         xmin_div%-=1
  112.         IF xmin_div%<1 THEN xmin_div%=1
  113.         SETICON(window%, xmin_no_icn, STR$(xmin_div%))
  114.         
  115.       WHEN ymaj_up_icn:
  116.         ymaj_div%+=1
  117.         IF ymaj_div%>99 THEN ymaj_div%=99
  118.         SETICON(window%, ymaj_no_icn, STR$(ymaj_div%))
  119.       WHEN ymaj_down_icn:
  120.         ymaj_div%-=1
  121.         IF ymaj_div%<1 THEN ymaj_div%=1
  122.         SETICON(window%, ymaj_no_icn, STR$(ymaj_div%))
  123.         
  124.       WHEN ymin_up_icn:
  125.         ymin_div%+=1
  126.         IF ymin_div%>10 THEN ymin_div%=10
  127.         SETICON(window%, ymin_no_icn, STR$(ymin_div%))
  128.       WHEN ymin_down_icn:
  129.         ymin_div%-=1
  130.         IF ymin_div%<1 THEN ymin_div%=1
  131.         SETICON(window%, ymin_no_icn, STR$(ymin_div%))
  132.         
  133.       WHEN icn_cancel:
  134.         CLOSEWINDOW(graphpaper1)
  135.       WHEN icn_create:
  136.         style%=GROUPSTATE(graphpaper1, 1) - 21
  137.         xmaj_scale%=GROUPSTATE(graphpaper1, 2) - 23
  138.         xmin_scale%=GROUPSTATE(graphpaper1, 3) - 25
  139.         ymaj_scale%=GROUPSTATE(graphpaper1, 4) - 27
  140.         ymin_scale%=GROUPSTATE(graphpaper1, 5) - 29
  141.         
  142.         xmaj_col%=GROUPSTATE(graphpaper1, 6) -  42
  143.         xmin_col%=GROUPSTATE(graphpaper1, 7) -  58
  144.         ymaj_col%=GROUPSTATE(graphpaper1, 8) - 74
  145.         ymin_col%=GROUPSTATE(graphpaper1, 9) - 90
  146.         OPENWINDOW(display)
  147.         CASE button% OF
  148.           WHEN 4:
  149.             CLOSEWINDOW(graphpaper1)
  150.           WHEN 1:
  151.             OPENWINDOW(graphpaper1)
  152.         ENDCASE  
  153.         PROCGraphPaper
  154.  
  155.     ENDCASE
  156.  
  157.   WHEN display
  158.     CASE button% OF
  159.       WHEN 1:
  160.         OPENWINDOW(graphpaper1)
  161.       WHEN 2:
  162.         a$=STR$(xmaj_div%)+"x"+STR$(ymaj_div%)
  163.         
  164.         SETSAVE("Graph"+a$, "file_aff")
  165.         OPENSAVE
  166.       WHEN 4:
  167.         CLOSEWINDOW(display)
  168.     ENDCASE
  169.   ENDCASE    
  170. ENDPROC
  171. ENDSUBR
  172.  
  173. DEF SUBR_PROCmouse
  174.     Event    -1
  175.     Every    -1
  176. DEF PROCmouse(RETURN mx%, RETURN my%, RETURN mb%, RETURN window, RETURN icon)
  177.   SYS "Wimp_GetPointerInfo",,workspace%
  178.   mx%= workspace%!0
  179.   my%= workspace%!4
  180.   mb%= workspace%!8
  181.   window= workspace%!12
  182.   icon= workspace%!16  
  183. ENDPROC
  184. ENDSUBR
  185.  
  186. DEF SUBR_PROCstart_up
  187.     Event    0
  188.     Every    -1
  189. DEF PROCstart_up
  190.   DIM workspace% 20
  191.   DIM colour%(17)
  192.   DIM scale%(2)
  193.  
  194.   created=FALSE
  195.  
  196.   scale%(0)=46080
  197.   scale%(1)=18142
  198.  
  199.   xmaj_no_icn=31
  200.   xmaj_down_icn=32
  201.   xmaj_up_icn=33
  202.  
  203.   xmin_no_icn=34
  204.   xmin_down_icn=35
  205.   xmin_up_icn=36
  206.  
  207.   ymaj_no_icn=37
  208.   ymaj_down_icn=38
  209.   ymaj_up_icn=39
  210.  
  211.   ymin_no_icn=40
  212.   ymin_down_icn=41
  213.   ymin_up_icn=42
  214.  
  215.   icn_cancel=107
  216.   icn_create=108
  217.  
  218.   style%=0
  219.   xmaj_scale%=1
  220.   xmin_scale%=0
  221.   ymaj_scale%=1
  222.   ymin_scale%=0
  223.   
  224.   xmaj_div%=20
  225.   xmin_div%=5
  226.   ymaj_div%=28
  227.   ymin_div%=5
  228.   
  229.   xmaj_sel%=51
  230.   xmin_sel%=74
  231.   ymaj_sel%=83
  232.   ymin_sel%=106
  233.  
  234.   colour%(1)=&ffffff00
  235.   colour%(2)=&d0d0d000
  236.   colour%(3)=&b0b0b000
  237.   colour%(4)=&90909000
  238.   colour%(5)=&70707000
  239.   colour%(6)=&50505000
  240.   colour%(7)=&30303000
  241.   colour%(8)=&00000000
  242.   colour%(9)=&90400000
  243.   colour%(10)=&00e0e000
  244.   colour%(11)=&00c00000
  245.   colour%(12)=&0000d000
  246.   colour%(13)=&b0e0e000
  247.   colour%(14)=&00805000
  248.   colour%(15)=&00b0ff00
  249.   colour%(16)=&ffb00000
  250.  
  251.   SETSTATE(graphpaper1,xmaj_sel%,TRUE)
  252.   SETSTATE(graphpaper1,xmin_sel%,TRUE)
  253.   SETSTATE(graphpaper1,ymaj_sel%,TRUE)
  254.   SETSTATE(graphpaper1,ymin_sel%,TRUE)
  255.   
  256.   xmaj_col%=colour%(xmaj_sel% - 42)
  257.   xmin_col%=colour%(xmin_sel% - 58)
  258.   ymaj_col%=colour%(ymaj_sel% - 74)
  259.   ymin_col%=colour%(ymin_sel% - 90)
  260. REM Radio buttons
  261.   SETSTATE(graphpaper1, 21, TRUE)
  262.   SETSTATE(graphpaper1, 24, TRUE)
  263.   SETSTATE(graphpaper1, 25, TRUE)
  264.   SETSTATE(graphpaper1, 28, TRUE)
  265.   SETSTATE(graphpaper1, 29, TRUE)
  266. REM Colours      
  267.   SETICON(graphpaper1, 31, STR$(xmaj_div%))
  268.   SETICON(graphpaper1, 34, STR$(xmin_div%))
  269.   SETICON(graphpaper1, 37, STR$(ymaj_div%))
  270.   SETICON(graphpaper1, 40, STR$(ymin_div%))
  271. ENDPROC
  272. ENDSUBR
  273.  
  274. DEF SUBR_PROCGraphPaper
  275.     Event    -1
  276.     Every    -1
  277. DEF PROCGraphPaper
  278.   CLWIN(display)
  279.   created=TRUE
  280.   font_handle%=0
  281.  
  282.   IF style%=0 THEN
  283.     xmax%=xmaj_div% * scale%(xmaj_scale%)
  284.     ymax%=ymaj_div% * scale%(ymaj_scale%)
  285.   ELSE
  286.     xmax%=ymaj_div% * scale%(ymaj_scale%) * 2
  287.     ymax%=xmax%
  288.     xorigin%=ymaj_div% * scale%(ymaj_scale%)
  289.     yorigin%=xorigin%
  290.   ENDIF
  291.  
  292.   HOURON
  293.   DRAW_INIT(1)
  294.   DRAW_FONT("Homerton.Medium", font_handle%)
  295.  
  296.   IF style%=0 THEN
  297.     REM Rectangular
  298.     DRAW_STARTPATH(-1, colour%(xmaj_col%), 0)
  299.     xinc%=scale%(xmaj_scale%)
  300.     DRAW_MOVE(0, 0)
  301.     DRAW_LINE(0, ymax%)
  302.     FOR j=0 TO xmaj_div%
  303.       xstep%=j * xinc%
  304.       DRAW_MOVE(xstep%, 0)
  305.       DRAW_LINE(xstep%, ymax%)
  306.     NEXT
  307.     DRAW_ENDPATH
  308.  
  309.     DRAW_STARTPATH(-1, colour%(xmin_col%), 1)
  310.     xstep2%=xinc%/xmin_div%
  311.     FOR j=0 TO (xmaj_div% - 1)
  312.       xstep%=j * xinc%
  313.       FOR k=1 TO (xmin_div% - 1)
  314.         IF xmin_scale%=0 THEN
  315.           xstep2a%=xstep% + xstep2% * k
  316.         ELSE
  317.           xstep2a%=xstep% + (LOG(1 + k*9/xmin_div%))*xinc%
  318.         ENDIF
  319.         DRAW_MOVE(xstep2a%, 0)
  320.         DRAW_LINE(xstep2a% , ymax%)
  321.       NEXT
  322.     NEXT
  323.     DRAW_ENDPATH
  324.  
  325.     DRAW_STARTPATH(-1, colour%(ymaj_col%), 1)
  326.     yinc%=scale%(ymaj_scale%)
  327.     DRAW_MOVE(0, 0)
  328.     DRAW_LINE(xmax%, 0)
  329.     FOR j=0 TO ymaj_div%
  330.       ystep%=j * yinc%
  331.       DRAW_MOVE(0, ystep%)
  332.       DRAW_LINE(xmax%, ystep%)
  333.     NEXT
  334.     DRAW_ENDPATH
  335.  
  336.     DRAW_STARTPATH(-1, colour%(ymin_col%), 1)
  337.     ystep2%=yinc%/ymin_div%
  338.     FOR j=0 TO (ymaj_div% - 1)
  339.       ystep%=j * yinc%
  340.       FOR k=1 TO (ymin_div% - 1)
  341.         IF ymin_scale%=0 THEN
  342.           ystep2a%=ystep% + ystep2% * k
  343.         ELSE
  344.           ystep2a%=ystep% + LOG(1 + k*9/ymin_div%)*yinc%
  345.         ENDIF
  346.         DRAW_MOVE(0, ystep2a%)
  347.         DRAW_LINE(xmax%, ystep2a%)
  348.       NEXT
  349.     NEXT
  350.     DRAW_ENDPATH    
  351.   ELSE
  352.     REM POLAR
  353.     DRAW_STARTPATH(-1, colour%(xmaj_col%), 0)
  354.     inc_angle=2 * PI /xmaj_div%
  355.     FOR j=0 TO xmaj_div%
  356.       angle=j * inc_angle
  357.       x%=COS(angle)*xorigin% + xorigin%
  358.       y%=SIN(angle)*xorigin% + xorigin%
  359.       DRAW_MOVE(xorigin%, yorigin%)      
  360.       DRAW_LINE(x%, y%)
  361.     NEXT
  362.     DRAW_ENDPATH
  363.  
  364.     DRAW_STARTPATH(-1, colour%(xmin_col%), 1)
  365.     min_angle=inc_angle / xmin_div%
  366.     FOR j=0 TO (xmaj_div% - 1)
  367.       maj_angle=j * inc_angle
  368.       FOR k=1 TO (xmin_div% - 1)
  369.         angle = maj_angle + k* min_angle
  370.         x%=COS(angle)*xorigin% + xorigin%
  371.         y%=SIN(angle)*xorigin% + xorigin%
  372.         DRAW_MOVE(xorigin%, yorigin%)
  373.         DRAW_LINE(x%, y%)       
  374.       NEXT
  375.     NEXT
  376.     DRAW_ENDPATH
  377.  
  378.     DRAW_STARTPATH(-1, colour%(ymaj_col%), 1)
  379.     yinc%=scale%(ymaj_scale%)
  380.     FOR j=0 TO ymaj_div%
  381.       ystep%=j * yinc%
  382.       PROCdraw_circle(xorigin%, yorigin%, ystep%)
  383.     NEXT
  384.     DRAW_ENDPATH
  385.  
  386.     DRAW_STARTPATH(-1, colour%(ymin_col%), 1)
  387.     ystep2%=yinc%/ymin_div%
  388.     FOR j=0 TO (ymaj_div% - 1)
  389.       ystep%=j * yinc%
  390.       FOR k=1 TO (ymin_div% - 1)
  391.         IF ymin_scale%=0 THEN
  392.           ystep2a%=ystep% + ystep2% * k
  393.         ELSE
  394.           ystep2a%=ystep% + LOG(1 + k*9/ymin_div%)*yinc%
  395.         ENDIF
  396.         PROCdraw_circle(xorigin%, yorigin%, ystep2a%)
  397.       NEXT
  398.     NEXT
  399.     DRAW_ENDPATH        
  400.   ENDIF
  401.  
  402.   HOUROFF
  403.  
  404.   drawfile%=DRAW_FILE
  405.   drawsize%=DRAW_SIZE
  406.   file$=FNscrap_dir+".GraphPaper"
  407.   DRAW_SAVE(file$)
  408.   DRAW_EXIT
  409.   RELEASE(drawfile%)
  410.   drawfile%=LOADFILE(file$)
  411.   IF drawfile%=-1 THEN WARNING(TOKEN("NoMem"), "GraphPaper")
  412.   SYS "OS_File",17,file$ TO ,,,,drawsize%
  413.   percenty%=1024*256*100/ymax%
  414.   percentx%=1280*256*100/xmax%
  415.   percent%=FNmin(percentx%, percenty%)
  416.   DRAW(display, 0, 0, 100,percent%,drawfile%, drawsize%) 
  417. ENDPROC
  418. ENDSUBR
  419.  
  420. DEF SUBR_PROCsquare
  421.     Event    -1
  422.     Every    -1
  423. DEF PROCsquare(minx%, miny%, maxx%, maxy%)
  424.   DRAW_MOVE(minx%, miny%)
  425.   DRAW_LINE(minx%, maxy%)
  426.   DRAW_LINE(maxx%, maxy%)
  427.   DRAW_LINE(maxx%, miny%)
  428.   DRAW_LINE(minx%, miny%) 
  429. ENDPROC
  430. ENDSUBR
  431.  
  432. DEF SUBR_FNscrap_dir
  433.     Event    -1
  434.     Every    -1
  435. DEF FNscrap_dir
  436.   LOCAL a$
  437.   a$=OSVAR("Wimp$ScrapDir")
  438.   IF a$="" THEN
  439.     MESSAGE("Unable to find 'Wimp$ScrapDir'. Please show the system the !Scrap application", "GraphPaper Error","warning","OK","","","")
  440.   ENDIF  
  441. =a$
  442. ENDSUBR
  443.  
  444. DEF SUBR_FNsave_file
  445.     Event    8
  446.     Every    -1
  447. DEF FNsave_file(file$)
  448.   LOCAL a$, b$
  449.   b$=FNscrap_dir
  450.   IF b$<>"" THEN
  451.     a$= "copy " + b$ +".GraphPaper " + file$ + " A~CDFL~V"
  452.     SYS "XOS_CLI", a$ 
  453.   ENDIF
  454. =0
  455. ENDSUBR
  456.  
  457. DEF SUBR_FNmin
  458.     Event    -1
  459.     Every    -1
  460. DEF FNmin(x , y)
  461.   IF x<y THEN =x ELSE =y  
  462.  
  463. ENDSUBR
  464.  
  465. DEF SUBR_PROCdraw_circle
  466.     Event    -1
  467.     Every    -1
  468. DEF PROCdraw_circle(x, y, r)
  469.   LOCAL v
  470.   v = .55 * r
  471.   DRAW_MOVE(x, y + r)
  472.   DRAW_CURVE(x + r, y, x + v, y + r, x + r, y + v)
  473.   DRAW_CURVE(x, y - r, x + r, y - v, x + v, y - r)
  474.   DRAW_CURVE(x - r, y, x - v, y - r, x - r, y - v)
  475.   DRAW_CURVE(x, y + r, x - r, y + v, x - v, y + r)
  476. ENDPROC
  477. ENDSUBR
  478.  
  479. DEF SUBR_PROCopen_help
  480.     Event    -1
  481.     Every    -1
  482. DEF PROCopen_help
  483.   LOCAL a$
  484.   a$="Filer_Run <GrphPaper$Dir>.!Help"
  485.   OSCLI a$ 
  486. ENDPROC
  487. ENDSUBR
  488.  
  489. DEF SUBR_PROCdraw_ellipse
  490.     Event    -1
  491.     Every    -1
  492. DEF PROCdraw_ellipse(x0, y0, x1, y1, x2, y2)
  493.   LOCAL x3, y3, x4, y4
  494.   IF x1 > x2 THEN
  495.     SWAP x1, x2
  496.     SWAP y1, y2
  497.   ENDIF
  498.   x3=2*x0 - x1
  499.   y3=2*y0 - y1
  500.   x4=2*x0 - x2
  501.   y4=2*y0 - y2
  502.   IF y3 > y1 THEN
  503.     SWAP x1, x3
  504.     SWAP y1, y3
  505.   ENDIF
  506.   IF x2 < x4 THEN
  507.     SWAP x2, x4
  508.     SWAP y2, y4
  509.   ENDIF
  510.   WARNING(STR$(x0) + " " +STR$(x1)+" "+STR$(x2)+" "+STR$(x3)+" "+STR$(x4), "Ellipse")
  511.   xrmaj=(x2 - x0)*.55
  512.   xrmin=ABS((x1 - x0)*.55)
  513.   yrmaj=(y1 - y0)*.55
  514.   yrmin=ABS((y2 - y0)*.55)
  515.   DRAW_MOVE(x1, y1)
  516.   IF y2 > y4 THEN
  517.     DRAW_CURVE(x2, y2, x1 + xrmaj, y1 + yrmin, x2 - xrmin, y2 + yrmaj)
  518.     DRAW_CURVE(x3, y3, x2 + xrmin, y2 - yrmaj, x3 + xrmaj, y3 + yrmin)
  519.     DRAW_CURVE(x4, y4, x3 - xrmaj, y3 - yrmin, x4 + xrmin, y4 - yrmaj)
  520.     DRAW_CURVE(x1, y1, x4 - xrmin, y4 + yrmaj, x1 - xrmaj, y1 - yrmin)
  521.   ELSE
  522.     DRAW_CURVE(x2, y2, x1 + xrmaj, y1 - yrmin, x2 - xrmin, y2 - yrmaj)
  523.     DRAW_CURVE(x3, y3, x2 + xrmin, y2 + yrmaj, x3 + xrmaj, y3 - yrmin)
  524.     DRAW_CURVE(x4, y4, x3 - xrmaj, y3 + yrmin, x4 + xrmin, y4 + yrmaj)
  525.     DRAW_CURVE(x1, y1, x4 - xrmin, y4 - yrmaj, x1 - xrmaj, y1 + yrmin)  
  526.   ENDIF
  527. ENDPROC
  528. ENDSUBR
  529.  
  530.